Weaponzation
介绍
首先探讨下“武器化”,按照我个人的理解用一把枪来做类比,一颗子弹或者一把空枪不足以构成威胁,同样的在Cobalt Strike将payload和可执行文件(EXE,DLL或者powershell等)结合起来构成了武器化的概念。
在Cobalt Strike中首先解释几个概念:
- artifact可以理解为包含了payload的全功能被控制程序。
- stage本身是一段尽可能小的手工优化过的汇编程序,连接到主控制端,按照主控制端的要求对大的payload进行下载。
- payload是指一段任意大小的,与位置无关的代码,被stage执行。Cobalt Strike中许多攻击和工作流都将payload用多个stage实现投递。
在上边两个图中表现了两种artifact的执行方式,一种是将payload用stage实现投递,另外一种方式是payload直接被运行在内存中。
可执行文件和DLLs
- 生成一个可执行文件或者DLL的方法
Attacks->Packages->Windows EXE(s) - 如何执行DLL文件
首先生成一个和目标机器匹配的dll文件(x86或者x64),然后在目标机器上使用rundll32.exe 启动生成的dll并运行startw函数即可。rundll32.exe artifact.dll,startw
托管文件
- 托管一个文件
Attacks->Web Drive-by->Host File - 管理或者删除托管文件
Attacks->Web Drive-by->Manage - 查看web活动
View->Web Log - 一些防御措施
针对curl,wget和lynx返回404 - 以下为托管文件的具体操作
Artifact Kit
Cobalt Strike使用Artifact Kit生成可执行文件和DLL,是一款商业框架,用于构建可绕过某些防病毒,具体下载方式 Help->Arsenal。
Artifact Kit工作原理
- 混淆shellcode并将其嵌套于二进制文件中,这种混淆可以绕过识别恶意代码的杀毒软件。
突破防病毒沙箱AV检测,Artifact Kit是可执行文件和DLL模板的集合,它依赖于反病毒产品不会模拟的某些行为来恢复二进制文件内的shellcode。
Artifact Kit使用步骤
- Help->Arsenal 下载Artifact Kit,这个是需要授权的。下载完成后解压并执行文件夹中build.sh,该脚本在Linux上执行。
- 导入脚本,Cobalt Strike->Script Manager,从该文件夹中加载artifact.cna脚本,然后按照生成可执行文件的步骤操作即可。
Scripted Web Delivery
利用powershell、bitsadmin、python、regsvr32远程下马,提供的单行程序将允许攻击者快速获得目标主机的会话。
- Attacks->Web Drive-by->Scripted Web Delivery
Resource Kit
Resource Kit是Cobalt Strike改变Cobalt Strike在其工作流程中使用的HTA,Powershell,Python,VBA和VBS脚本模板的方法。
下载方法Help->Arsenal下载Resource Kit,这个同样需要授权,下载完成后将resources.cna脚本加载使用,然后按照生成可执行文件的步骤操作即可。
用户驱动攻击
在用户驱动攻击中包括了HTML、Java Signed Applet攻击、office宏、windows木马程序,这些攻击方式可以根据实际灵活变更,比如通过Resource Kit可以修改HTML以及office宏,通过Applet Kit修改Java Signed Applet攻击,通过Artifact Kit修改windows木马等。
msf运行32位Beacon
- 在Cobalt Strike中新建一个监听
- 在msf中选择一个客户端攻击木马
- 将payload设置为http或者https
- 将LHOST和RHOST设置为Beacon监听地址及端口
- 设置DisablePayloadHeadler为True
- 设置PrependMigrate为TRUE
- 生成一个木马,使用Cobalt Strike加载生成一个payload,目标及其访问后获得Beacon
自定义武器化
- Attacks->Packages->Windows EXE(S) 生成一个现成的木马
- Attacks->Packages->Payload Generator 生成一个payload
- 使用第三方artifact或者工具
- 自己写脚本集成到Cobalt Strike
行为检测与绕过
回到攻击链,我们现在讨论的目标是代码执行
如下图所示,四个环节都可能被检测到:
- 在攻击链的第一部分依旧是artifact这样一个包含了payload的全功能被控制程序,函数或者一些特征码会被检测到;
- 一旦我们的artifact在目标机器上运行,那我们就会看到一些行为,比如我们刚好有个office宏运行在一个临时的进程中,并且将我们的payload注入到进程中,这个时候会产生的行为可能就会被检测到,比如启动一个程序、注入一个新的或者已经存在的进程、写文件;
- 我们成功注入进程后,我们所有的操作会在内存中进行,根据payload占据内存和线程的属性也可能会被检测到;
- 进程行为也会被检测,比如explorer.exe,notepad.exe等进程做出了一些非常规的动作,或者还有些常见的被滥用应用程序检测。
那么针对以上可能被检测到的点我们应该如何绕过 - 对于函数或者特征码以及注入进程的操作一般使用混淆来绕过
- 对于写文件、进程行为检测一般采用规避的方式
- 对于启动程序应该采用欺骗父进程的方式
- 此外对于payload检测同样应该采用规避的方式
内存检测及绕过
检测方式一般如下:
- 查找与内存映射文件没有关联的线程开始地址。
- 内存权限,读写权限是攻击工具中常见的模式,有时候内存区域的执行权限与内存映射文件无关,都会被严格检测。
- 内存内容也会被检测,比如一个PE文件或者与常见技术有关系的特征码等。
绕过方式:
- 修改artifact 启动地址
- artifact避免使用读写执行权限
- 避免使用stagers
- 在Malleable C2的配置文件中设置userwx为false
- 开启stomping模块
- 设置image_size_x86以及image_size_x64
- 使用prepend实现PE在内存中的偏移量
- 设置obfuscate为true
- 设置cleanup为true
- 使用strrep来编辑字符串
- 设置sleep_mask为true